// ignore_for_file: slash_for_doc_comments

import 'package:shared_preferences/shared_preferences.dart';

//1.创建Token管理类(TokenManager)
class TokenManager {
  //2. 定义私有属性(_token)和常量(_key)

  String? _token;
  final _key = 'enjoy_token';

  //3. 创建一个全局单例对象
  /**
   * 1. 使用 _instance 变量来存储类的唯一实例
   * 2. 通过私有构造函数 TokenManager._internal() 确保外部不能直接创建实例
   * 3. factory TokenManager() 工厂方法用于检查 _instance 是否已初始化
   *    若未初始化则创建实例并赋值，最后返回 _instance!
   */
  static TokenManager? _instance; // 全局单例对象
  TokenManager._internal(); // 私有构造函数
  factory TokenManager() {
    _instance ??= TokenManager._internal(); // 工厂方法
    return _instance!; // 返回单例对象
  }

//4.提供init方法用于从本地获取token
  Future init() async {
    final prefs = await SharedPreferences.getInstance(); //获取SharedPreferences实例
    _token = prefs.getString(_key);
  }

  //5.提供saveToken方法用于存储token
  Future saveToken(String token) async {
    _token = token;
    final prefs = await SharedPreferences.getInstance();
    await prefs.setString(_key, token); //保存token到SharedPreferences
  }

  //6.同步获取token
  String? getToken() {
    return _token;
  }

  //7.清除token
  Future reoveToken() async {
    _token = null;
    final prefs = await SharedPreferences.getInstance();
    await prefs.remove(_key); //删除SharedPreferences中token
  }
}
